package com.zy.面向对象.抽象类

object test {
  def main(args: Array[String]): Unit = {
    val person: Person = new Student
    person.eat()
    person.study()

    println("==========================")

    // 匿名抽象类
    val person1 = new Person {
      override var name: String = "李四"

      override def study(): Unit = {
        println(s"抽象类中 $name 正在学习")
      }
    }
    person1.eat()
    person1.study()
  }
}

abstract class Person {
  // 没有初始值的变量，默认就是抽象变量
  var name: String

  // 没有方法体的方法，默认就是抽象方法
  def study(): Unit

  def eat(): Unit = {
    println("人在吃饭")
  }
}

class Student extends Person {
  override var name: String = "张三"

  // 此处的override可以省略
  override def study(): Unit = {
    println(s"$name 正在学习")
  }

  override def eat(): Unit = {
    println(s"$name 正在吃饭")
  }
}